/**
 * 拷贝是对一个对象进行拷贝，之所以有深浅拷贝，与拷贝的方法是无关的，是与实现的代码有关的。
 * 浅拷贝：不管成员变量是基本类型还是引用类型，只是对成员变量的拷贝，并没有将成员变量对应的值和对象进行了拷贝
 * 深拷贝：不仅对成员变量进行了拷贝还对成员变量对应的值以及对象都进行了拷贝
 */
public class Person implements Cloneable{
    public String name;
    public Money m;

    public Person(String name) {
        this.name = name;
        m = new Money();
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        //深拷贝
        Person tmp =  (Person) super.clone();
        tmp.m = (Money) this.m.clone();
        return tmp;
        //浅拷贝
        //return super.clone();
    }
}
class Money implements Cloneable{
    public double money = 99.99;

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

